/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  
Projet: Laboratoire #3
etudiant(e)s: Simon Castro
			  Fredy Alexander 
			  Renaud Vincent


Professeur : 
Nom du fichier: Jeu.java
Date cree: 2013-10-20
Date dern. modif. 2013-10-20
 *******************************************************
Historique des modifications

La methode calculerLeVainqueur retourn maintenant tableau contenant les joueurs
de type Joueur et pas seulement leur noms.

 *******************************************************
2013-10-20 Version 1.0

 *******************************************************/ 

package cadricielJeuDe;
import java.util.ArrayList;

/**
 * Cette classe est reponsable du calcul des points des joueurs et donner le
 * vainqueur. 
 * 
 * @author Fredy Alexander
 *
 */
public class Jeu{

	private int nbTours; 
	private CalculateurScore strategieScore;
	//objet representant une partie en cours
	private Partie partie;

	/**
	 * Constructeur de la classe Jeu
	 * 
	 * @param c
	 * @param d
	 */
	public Jeu (Partie partie, CalculateurScore strategieScore){
		this.strategieScore = strategieScore;
		this.partie = partie;
	}

	
	/**
	 * La methode cumule le score du joueur actuel apres une lancee de des 
	 * (selon les regles du jeu) et decide s'il faut passer la main au prochain 
	 * joueur ou non.
	 * 
	 * @param tour
	 * @param listeValeurs
	 * @return Object
	 */
	 
	public Object calculerScoreTour(int tour, ArrayList<Integer> listeValeurs){
		
		return strategieScore.calculScoreTour(tour, listeValeurs);
	}
	
	/**
	 * Methode impletemente de l'interface Strategie. Elle trie les joueurs par
	 * rapport a leur score obtenu et retourne un tableau de type Joueur mais
	 * triee.
	 * 
	 * @return Joueur[]
	 */

	public CollectionJoueurs calculerLeVainqueur(CollectionJoueurs cj) {
	
		return strategieScore.calculerLeVainqueur(cj);
	}
	
	
	/************
	 * Accesseurs
	 ************/
	
	public Partie getPartie(){
		return partie;
	}
	
	/************
	 * Mutateurs
	 ************/
	
	public void setNbTours(int nbTours){
		this.nbTours = nbTours;
	}
	
	/**
	 * Methode prive de la classe Jeu. Elle cumule le score d'un joueur actuel
	 * et mute le nouveau score dans l'objet.
	 * 
	 * @param index
	 */
	public void cumuleScoreJoueur(int index, int score){
		
		score = score + partie.getCJoueur().getJoueurAt(index).getScore();
		partie.getCJoueur().getJoueurAt(index).setScore(score);
	}
}